import json
import yaml
import os
import csv

class FileUtils:
    """
    文件处理工具类，提供读取不同格式文件的方法
    """
    
    @staticmethod
    def read_json(file_path):
        """
        读取JSON文件
        :param file_path: 文件路径
        :return: JSON数据（字典或列表）
        """
        if not os.path.exists(file_path):
            raise FileNotFoundError(f"文件不存在: {file_path}")
        
        with open(file_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    
    @staticmethod
    def read_yaml(file_path):
        """
        读取YAML文件
        :param file_path: 文件路径
        :return: YAML数据
        """
        if not os.path.exists(file_path):
            raise FileNotFoundError(f"文件不存在: {file_path}")
        
        with open(file_path, 'r', encoding='utf-8') as f:
            return yaml.safe_load(f)

    @staticmethod
    def read_csv(file_path):
        """
        读取CSV文件
        :param file_path: 文件路径
        :return: 列表，每行为一个字典（以表头为key）
        """
        if not os.path.exists(file_path):
            raise FileNotFoundError(f"文件不存在: {file_path}")

        with open(file_path, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            return [row for row in reader]

    @staticmethod
    def read_file(file_path):
        """
        根据文件扩展名自动选择读取方法
        :param file_path: 文件路径
        :return: 文件内容
        """
        _, ext = os.path.splitext(file_path)
        ext = ext.lower()
        
        if ext == '.json':
            return FileUtils.read_json(file_path)
        elif ext in ('.yaml', '.yml'):
            return FileUtils.read_yaml(file_path)
        elif ext == '.csv':
            return FileUtils.read_csv(file_path)


# 创建全局实例
file_utils = FileUtils()